package com.aote.util;

import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import com.aote.model.block.DataBlockCondition;

/**
 * 成批处理结果
 */
public class BatchQueryResult {
	/**
	 * 查询的结果数据
	 */
	private List datas = new LinkedList();

	public BatchQueryResult(List datas) {
		this.datas = datas;
	}
	
	/**
	 * 根据条件得到显示内容
	 */
	public String getShowData(String condition) {
		// 创建数据条件对象，根据条件找到合适的数据并根据属性名称得到数据
		DataBlockCondition dbc = new DataBlockCondition(condition);
		Hashtable data = getShowData(dbc);
		if (data == null) {
			return "　";
		}
		String result = (String) data.get(dbc.getName());
		if (result == null) {
			return "　";
		}
		return result;
	}

	/**
	 * 根据送入的条件从数据中找到匹配的数据
	 */
	private Hashtable getShowData(DataBlockCondition dbc) {
		Iterator iter = this.datas.iterator();
		while (iter.hasNext()) {
			Hashtable data = (Hashtable) iter.next();
			// 如果没有条件但是改想数据含有要显示的属性名
			if (dbc.getConditions().size() == 0
					&& hasShowAttr(dbc.getName(), data)) {
				return data;
			}
			// 如果条件相同并还有显示属性
			else if (isSame(dbc.getConditions(), data)
					&& hasShowAttr(dbc.getName(), data)) {
				return data;
			}
		}
		return null;
	}

	/**
	 * 判断是否还有显示属性
	 */
	private boolean hasShowAttr(String showAttrName, Hashtable data) {
		return data.containsKey(showAttrName);
	}

	/**
	 * 判断是否是符合条件的数据项
	 */
	private boolean isSame(Map conds, Hashtable data) {
		Iterator iter = conds.keySet().iterator();
		while (iter.hasNext()) {
			String condKey = (String) iter.next();
			String condValue = (String) conds.get(condKey);
			String dataValue = (String) data.get(condKey);
			if (!condValue.equals(dataValue)) {
				return false;
			}
		}
		return true;
	}

}
